/*
    C++11多线程库中promise的使用
    promise: 是一个类模板，可以用于在异步线程中进行值的设置(可控)，然后在另一个线程中通过promise中future对象来获取值
    promise和async区别：
        1. promise是类模板，可以在异步线程中手动设置结果，提供更细粒度的控制，在另一个线程中通过future对象来获取
        2. async是函数模板，它只是把执行任务的结果保存到future对象中
*/

#include <iostream>
#include <future>
#include <thread>
#include <chrono>

void add(int num1, int num2, std::promise<int> &promise)
{
    std::this_thread::sleep_for(std::chrono::seconds(2));
    promise.set_value(num1 + num2);
}

int main()
{
    std::promise<int> promise;
    std::future<int> future = promise.get_future();
    std::thread t(add, 1, 2, std::ref(promise));
    std::cout << "result: " << future.get() << std::endl;
    t.join();
    return 0;
}